package 并发编程.单例模式线程安全;

/**
 * 懒汉式-双重检查
 * <p>
 * 由于类初始不是原子操作，new SingleDcl() 时构造特别复杂，还没等初始化（赋值）完毕，类的引用已经有了，
 * 当其他线程拿到未初始化完的 SingleDcl 对象 访问其元素时 可能会产生空指针异常
 * 解决办法： 把 singleDcl变量 加 volatile 修饰
 * <p>
 * 此类是 解决后的单例模式
 */
public class SingleDcl {
    private volatile static SingleDcl singleDcl;

    private SingleDcl() {
    }

    public static SingleDcl getInstance() {
        if (singleDcl == null) {
            synchronized (SingleDcl.class) {//类锁
                if (singleDcl == null) {
                    singleDcl = new SingleDcl();
                }
            }
        }
        return singleDcl;
    }
}
